<?php

namespace app\api\controller;

use app\common\controller\Api;
use app\common\library\Ems;
use app\common\library\Sms;
use app\common\model\User as MyModel;
use fast\Random;
use think\Validate;
use think\Cache;

/**
 * 会员接口
 */
class User extends Api
{
    protected $noNeedLogin = ['login', 'mobilelogin', 'register', 'resetpwd', 'changeemail', 'changemobile', 'third','wechat','wechatLogin','wechatXiaoLogin'];
    protected $noNeedRight = '*';

    public function _initialize()
    {
        parent::_initialize();
    }

    /**
     * 会员中心
     */
    public function index()
    {
        $this->success('', ['welcome' => $this->auth->nickname]);
    }

    /**
     * 会员登录
     *
     * @param string $account  账号
     * @param string $password 密码
     */
    public function login()
    {
        $account = $this->request->request('account');
        $password = $this->request->request('password');
        if (!$account || !$password) {
            $this->error(__('Invalid parameters'));
        }
        $ret = $this->auth->login($account, $password);
        if ($ret) {
            $data = ['userinfo' => $this->auth->getUserinfo()];
            $this->success(__('Logged in successful'), $data);
        } else {
            $this->error($this->auth->getError());
        }
    }

    /**
     * 手机验证码登录
     *
     * @param string $mobile  手机号
     * @param string $captcha 验证码
     */
    public function mobilelogin()
    {
        $mobile = $this->request->request('mobile');
        $captcha = $this->request->request('captcha');
        if (!$mobile || !$captcha) {
            $this->error(__('Invalid parameters'));
        }
        if (!Validate::regex($mobile, "^1\d{10}$")) {
            $this->error(__('Mobile is incorrect'));
        }
//        if (!Sms::check($mobile, $captcha, 'mobilelogin')) {
//            $this->error(__('Captcha is incorrect'));
//        }
        $user = \app\common\model\User::getByMobile($mobile);
        if ($user) {
            if ($user->status != 'normal') {
                $this->error(__('Account is locked'));
            }
            //如果已经有账号则直接登录
            $ret = $this->auth->direct($user->id);
        } else {
            $ret = $this->auth->register($mobile, Random::alnum(), '', $mobile, []);
        }
        if ($ret) {
            Sms::flush($mobile, 'mobilelogin');
            $data = ['userinfo' => $this->auth->getUserinfo()];
            $this->success(__('Logged in successful'), $data);
        } else {
            $this->error($this->auth->getError());
        }
    }

    /**
     * 注册会员
     *
     * @param string $username 用户名
     * @param string $password 密码
     * @param string $email    邮箱
     * @param string $mobile   手机号
     * @param string $code   验证码
     */
    public function register()
    {
//        $username = $this->request->request('username');
        $password = $this->request->request('password');
//        $email = $this->request->request('email');
        $mobile = $this->request->request('mobile');
        $code = $this->request->request('code');
//        if (!$username || !$password) {
//            $this->error(__('Invalid parameters'));
//        }
//        if ($email && !Validate::is($email, "email")) {
//            $this->error(__('Email is incorrect'));
//        }
        if ($mobile && !Validate::regex($mobile, "^1\d{10}$")) {
            $this->error(__('Mobile is incorrect'));
        }
        $ret = Sms::check($mobile, $code, 'register');
        if (!$ret) {
            $this->error(__('Captcha is incorrect'));
        }
        $ret = $this->auth->register($mobile, $password, '', $mobile, []);
        if ($ret) {
            $data = ['userinfo' => $this->auth->getUserinfo()];
            $this->success(__('Sign up successful'), $data);
        } else {
            $this->error($this->auth->getError());
        }
    }

    /**
     * 退出登录
     */
    public function logout()
    {
        $this->auth->logout();
        $this->success(__('Logout successful'));
    }

    /**
     * 修改会员个人信息
     *
     * @param string $avatar   头像地址
     * @param string $username 用户名
     * @param string $nickname 昵称
     * @param string $bio      个人简介
     */
    public function profile()
    {
        $user = $this->auth->getUser();
        $username = $this->request->request('username');
        $nickname = $this->request->request('nickname');
        $bio = $this->request->request('bio');
        $card = $this->request->request('card');
        $avatar = $this->request->request('avatar', '', 'trim,strip_tags,htmlspecialchars');
        if ($username) {
//            $exists = \app\common\model\User::where('username', $username)->where('id', '<>', $this->auth->id)->find();
//            if ($exists) {
//                $this->error(__('Username already exists'));
//            }
            $user->username = $username;
        }
        if ($nickname) {
//            $exists = \app\common\model\User::where('nickname', $nickname)->where('id', '<>', $this->auth->id)->find();
//            if ($exists) {
//                $this->error(__('Nickname already exists'));
//            }
            $user->nickname = $nickname;
        }
        $user->bio = $bio;
        $user->is_set = 1;
        if ($avatar){
            $user->avatar = $avatar;

        }
        if($card){
            $user->card = $card;
        }
        $user->save();
        $this->success();
    }

    /**
     * 修改邮箱
     *
     * @param string $email   邮箱
     * @param string $captcha 验证码
     */
    public function changeemail()
    {
        $user = $this->auth->getUser();
        $email = $this->request->post('email');
        $captcha = $this->request->request('captcha');
        if (!$email || !$captcha) {
            $this->error(__('Invalid parameters'));
        }
        if (!Validate::is($email, "email")) {
            $this->error(__('Email is incorrect'));
        }
        if (\app\common\model\User::where('email', $email)->where('id', '<>', $user->id)->find()) {
            $this->error(__('Email already exists'));
        }
        $result = Ems::check($email, $captcha, 'changeemail');
        if (!$result) {
            $this->error(__('Captcha is incorrect'));
        }
        $verification = $user->verification;
        $verification->email = 1;
        $user->verification = $verification;
        $user->email = $email;
        $user->save();

        Ems::flush($email, 'changeemail');
        $this->success();
    }

    /**
     * 修改手机号
     *
     * @param string $mobile   手机号
     * @param string $captcha 验证码
     */
    public function changemobile()
    {
        $user = $this->auth->getUser();
        $mobile = $this->request->param('mobile');
        $captcha = $this->request->param('captcha');
        if (!$mobile || !$captcha) {
            $this->error(__('Invalid parameters'));
        }
        if (!Validate::regex($mobile, "^1\d{10}$")) {
            $this->error(__('Mobile is incorrect'));
        }
        if (\app\common\model\User::where('mobile', $mobile)->where('id', '<>', $user->id)->find()) {
            $this->error(__('Mobile already exists'));
        }
        $result = Sms::check($mobile, $captcha, 'changemobile');
        if (!$result) {
            $this->error(__('Captcha is incorrect'));
        }
        $verification = $user->verification;
        $verification->mobile = 1;
        $user->verification = $verification;
        $user->mobile = $mobile;
        $user->save();

        Sms::flush($mobile, 'changemobile');
        $this->success();
    }

    /**
     * @DESC:
     * @author: renyixu
     * @Time: 2020/11/9   8:10 下午
     * 绑定手机号
     */
    public function bindMobile(){
//        $user_id=$this->auth->id;
//        $openid=$this->auth->openid;
//        $mobile=$this->auth->mobile;
//        if ($mobile){
//            $this->error('当前用户已绑定手机');
//        }
//        $newMobile=input('mobile');
//        if (!$newMobile){
//            $this->error('请完善参数');
//        }
//        $user = \app\common\model\User::get($user_id);
//        if($user['mobile']){
//
//        }
//         \app\common\model\User::where('id','=',$user_id)->update(['mobile'=>$newMobile]);
//        $ret = $this->auth->direct($user_id);
////        $data  = $this->auth->getUserinfo();
//        $this->success('绑定成功', ['info'=>$ret]);
//

        $uinfo  = $this->auth->getUser();//新手机号
        $mobile = $this->request->param('mobile');
        $code   = $this->request->param("code");
//        dd($uinfo);
        $result = Sms::check($mobile, $code, 'mobilebinding');
        if (!$result) {
            $this->error(__('Captcha is incorrect'));
        }

        $where['mobile'] = $mobile;
        $info = MyModel::where($where)->find();//查看手机号是否有账号

        if(!empty($info)){
//            if(empty( $info->aliid)){
//                $info->aliid =  $uinfo->aliid ;
//            }
//            if(empty( $info->openid)){
//                $info->openid =  $uinfo->openid ;
//            }
            if(empty( $info->unionid)){
                $info->unionid =  $uinfo->unionid ;
            }
//            if(empty( $info->iosid)){
//                $info->iosid =  $uinfo->iosid ;
//            }
            if(empty( $info->xiao_openid)){
                $info->xiao_openid =  $uinfo->xiao_openid ;
            }
            $uinfo->delete();
            $info->save();
            $ret = $this->auth->direct($info->id);
        }else{
            $uinfo->mobile=$mobile;
            $uinfo->save();
            $ret = $this->auth->direct($uinfo->id);
        }
//        //如果已经有账号则直接登录
//        $ret = $this->auth->direct($uinfo->id);
        if ($ret) {
            $data = ['info' => $this->auth->getUserinfo()];
            $this->success(__('Logged in successful'), $data);
        } else {
            $this->error($this->auth->getError());
        }
    }
    /**
     * @DESC:
     * @author: renyixu
     * @Time: 2020/11/9   1:53 下午
     * 获取用户信息
     */
    public function getUserinfo(){
        $data  = $this->auth->getUserinfo();
        $this->success('请求成功', ['info'=>$data]);
    }
    /**
     * 第三方登录
     *
     * @param string $platform 平台名称
     * @param string $code     Code码
     */
    public function third()
    {
        $url = url('user/index');
        $platform = $this->request->request("platform");
        $code = $this->request->request("code");
        $config = get_addon_config('third');
        if (!$config || !isset($config[$platform])) {
            $this->error(__('Invalid parameters'));
        }
        $app = new \addons\third\library\Application($config);
        //通过code换access_token和绑定会员
        $result = $app->{$platform}->getUserInfo(['code' => $code]);
        if ($result) {
            $loginret = \addons\third\library\Service::connect($platform, $result);
            if ($loginret) {
                $data = [
                    'userinfo'  => $this->auth->getUserinfo(),
                    'thirdinfo' => $result
                ];
                $this->success(__('Logged in successful'), $data);
            }
        }
        $this->error(__('Operation failed'), $url);
    }

    /**
     * 重置密码
     *
     * @param string $mobile      手机号
     * @param string $newpassword 新密码
     * @param string $captcha     验证码
     */
    public function resetpwd()
    {
//        $type = $this->request->request("type");
        $mobile = $this->request->request("mobile");
//        $email = $this->request->request("email");
        $newpassword = $this->request->request("newpassword");
        $captcha = $this->request->request("captcha");
        if (!$newpassword || !$captcha) {
            $this->error(__('Invalid parameters'));
        }
//        if ($type == 'mobile') {
            if (!Validate::regex($mobile, "^1\d{10}$")) {
                $this->error(__('Mobile is incorrect'));
            }
            $user = \app\common\model\User::getByMobile($mobile);
            if (!$user) {
                $this->error(__('User not found'));
            }
            $ret = Sms::check($mobile, $captcha, 'resetpwd');
            if (!$ret) {
                $this->error(__('Captcha is incorrect'));
            }
            Sms::flush($mobile, 'resetpwd');
//        } else {
//            if (!Validate::is($email, "email")) {
//                $this->error(__('Email is incorrect'));
//            }
//            $user = \app\common\model\User::getByEmail($email);
//            if (!$user) {
//                $this->error(__('User not found'));
//            }
//            $ret = Ems::check($email, $captcha, 'resetpwd');
//            if (!$ret) {
//                $this->error(__('Captcha is incorrect'));
//            }
//            Ems::flush($email, 'resetpwd');
//        }
        //模拟一次登录
        $this->auth->direct($user->id);
        $ret = $this->auth->changepwd($newpassword, '', true);
        if ($ret) {
            $this->success(__('Reset password successful'));
        } else {
            $this->error($this->auth->getError());
        }
    }

    /**
     * 微信公众号调起微信
     * */
    public function wechat(){
       // $notify = urlEncode("http://wxshop.191292.net/pages/login/loginW/");
        $notify = urlEncode("http://wxshop.191292.net");
        //$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxd4873aabcd30a087&redirect_uri={$notify}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
        $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxd4873aabcd30a087&redirect_uri={$notify}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
        $this->success('成功',['info'=>$url]);
    }

    /**
     * @DESC:
     * @author: renyixu
     * @Time: 2020/11/6   11:27 上午
     * 微信登陆
     */
    public function wechatLogin(){
        $code = input('code');
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxd4873aabcd30a087&secret=0f1b53d056cc63a9435e3bb07b5c822c&code={$code}&grant_type=authorization_code";
        $data = getUrl($url);
//        dd();
        $data = json_decode($data,true);
        $access_token = $data['access_token'];
        $openid = $data['openid'];
        $user = \app\common\model\User::getByOpenid($openid);

        if ($user) {
            if ($user->status != 'normal') {
                $this->error(__('Account is locked'));
            }
            //如果已经有账号则直接登录
            $ret = $this->auth->direct($user->id);
        } else {
            $getuser_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}&lang=zh_CN";
            $userinfo = curl_get($getuser_url);
            $userinfo = json_decode($userinfo,true);
            $extends = [
                'nickname' => $userinfo['nickname'],
                'avatar' => $userinfo['headimgurl'],
                'openid' => $userinfo['openid'],
            ];
//            if ($userMobile){
//                \app\common\model\User::where('mobile','=',$userinfo['mobile'])->update(['openid'=>$openid]);
//            }else{
                $ret = $this->auth->register($userinfo['nickname'], Random::alnum(), '', '', $extends);
         //   }
        }
        if ($ret) {
            $data = ['userinfo' => $this->auth->getUserinfo()];
            $this->success(__('Logged in successful'), $data);
        } else {
            $this->error($this->auth->getError());
        }

        $this->success('成功',$data);
    }



    /**
     * @DESC:
     * @author: renyixu
     * @Time: 2020/11/6   11:27 上午
     * 小程序微信登录
     */
    public function wechatXiaoLogin(){
        $code = input('code');
//        dd($code);
      //  $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx6c9c5f311459d492&secret=b15b9ef1e209a7670d0046b660a91153&js_code={$code}&grant_type=authorization_code";
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid=wx6c9c5f311459d492&secret=b15b9ef1e209a7670d0046b660a91153&js_code={$code}&grant_type=authorization_code";
        $data = getUrl($url);
//        dd();
        $data = json_decode($data,true);

        //dd($data);
//        $access_token = $data['access_token'];
//        $openid = $data['openid'];
//        $user = \app\common\model\User::getByOpenid($openid);
//
//        if ($user) {
//            if ($user->status != 'normal') {
//                $this->error(__('Account is locked'));
//            }
//            //如果已经有账号则直接登录
//            $ret = $this->auth->direct($user->id);
//        } else {
//            $getuser_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}&lang=zh_CN";
//            $userinfo = curl_get($getuser_url);
//            $userinfo = json_decode($userinfo,true);
//            $extends = [
//                'nickname' => $userinfo['nickname'],
//                'avatar' => $userinfo['headimgurl'],
//                'openid' => $userinfo['openid'],
//            ];
////            if ($userMobile){
////                \app\common\model\User::where('mobile','=',$userinfo['mobile'])->update(['openid'=>$openid]);
////            }else{
//            $ret = $this->auth->register($userinfo['nickname'], Random::alnum(), '', '', $extends);
//            //   }
//        }
//        if ($ret) {
//            $data = ['userinfo' => $this->auth->getUserinfo()];
//            $this->success(__('Logged in successful'), $data);
//        } else {
//            $this->error($this->auth->getError());
//        }
        $this->success('成功',$data);
    }

    /**
     * 微信配置信息
     * @return array
     */
    protected function wxconfig(){
        return [
            'appid' => 'wx21d622c2795d550b',
            'appsecret' => '37014fe8fea709b0b0dfae8623603659',
            'mchid' => '1600614017',
            'key' => 'liangjiahe2008liangjiahe20082008',
        ];
    }
    /**
     * 获取access_token
     */
    protected function get_access_token(){
        $wxmsg = $this->wxconfig();
        $get_access_token_url =  'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$wxmsg['appid'].'&secret='.$wxmsg['appsecret'];
        $wxmsg = curl_get($get_access_token_url);
        return $wxmsg;
    }
    /*
     * 评价
     * */
    public function goodsComment(){
        $user_id = $this->auth->id;
        $goods_id = $this->request->param('goods_id');
    }
}
